package d10_genericity_mothod;

import d5_enum.A;

import java.lang.reflect.AnnotatedArrayType;
import java.util.ArrayList;

public class Test02 {
    public static void main(String[] args) {
        //目标: 通配符和上下限
        //需求:所有汽车要一起参加比赛
        ArrayList<TSL> tsls = new ArrayList<>();
        tsls.add(new TSL());
        tsls.add(new TSL());
        tsls.add(new TSL());
        go(tsls);

        ArrayList<LX> lxes = new ArrayList<>();
        lxes.add(new LX());
        lxes.add(new LX());
        lxes.add(new LX());
        go(lxes);

        //如果不使用上下限,就会导致什么类型都能进来
//        ArrayList<Dog> dogs = new ArrayList<>();
//        dogs.add(new Dog());
//        dogs.add(new Dog());
//        dogs.add(new Dog());
//        go(dogs);

    }

    //写car的时候是无法把,LX与TSL送进去,因为这是二维类型已经失去了继承关系
    //虽然LX和TSL是Car子类,但是ArrayList<TSL> 和ArrayList<LX> 与ArrayList<Car> 没有半毛钱关系
    //解释:相当于男人与女人都是人,但是男厕所与女厕所跟公测有个半毛钱关系
    //为了解决这个问题,所以推出了 通配符?
    //通配符: 其实就是 ? ,可以在使用泛型的时候代表一切类型. E T K V 是定义是用 ?是使用时
    //泛型的上下限: ? extends Car(上限, ? 必须是Car或者Car子类)
    //           ? super Car(下限 ? 必须是Car或者Car的父类)
    public static void go(ArrayList<? extends Car> cars) {

    }
}

class Car {

}

class TSL extends Car {

}

class LX extends Car {

}

class Dog {

}
